/**
 * 本地存储工具类
 * 用于管理用户信息和登录状态
 */

// 存储键名
const STORAGE_KEYS = {
  USER_INFO: 'user_info',        // 用户信息
  IS_LOGGED_IN: 'is_logged_in',  // 登录状态
  USER_TOKEN: 'user_token',      // 用户token（融云token）
  USER_PHONE: 'user_phone',      // 用户手机号
  FRIEND_COUNT: 'friend_count'   // 🔥 好友数量缓存（用于"我的"页面粉丝数显示）
};

/**
 * 保存用户信息
 * @param {Object} userInfo - 用户信息对象
 */
function saveUserInfo(userInfo) {
  try {
    console.log('💾 保存用户信息到本地存储');
    console.log('📊 用户数据:', userInfo);

    wx.setStorageSync(STORAGE_KEYS.USER_INFO, userInfo);
    wx.setStorageSync(STORAGE_KEYS.IS_LOGGED_IN, true);
    
    // 🔥 保存融云token（登录接口直接返回）
    if (userInfo.extraData && userInfo.extraData.token) {
      const rongcloudToken = userInfo.extraData.token;
      wx.setStorageSync('rongcloud_token', rongcloudToken);
      console.log('🔑 融云Token已保存:', rongcloudToken.substring(0, 20) + '...');
    }
    
    // 保存手机号
    if (userInfo.userPhone) {
      wx.setStorageSync(STORAGE_KEYS.USER_PHONE, userInfo.userPhone);
    }

    console.log('✅ 用户信息保存成功');
    return true;
  } catch (error) {
    console.error('💥 保存用户信息失败:', error);
    return false;
  }
}

/**
 * 获取用户信息
 * @returns {Object|null}
 */
function getUserInfo() {
  try {
    const userInfo = wx.getStorageSync(STORAGE_KEYS.USER_INFO);
    console.log('📖 读取用户信息:', userInfo ? '成功' : '失败');
    
    if (userInfo) {
      // 🔥 自动补充 openid（如果 extraData 中没有，但缓存中有）
      const cachedOpenId = wx.getStorageSync('wx_openid');
      if (cachedOpenId) {
        if (!userInfo.extraData) {
          userInfo.extraData = {};
        }
        if (!userInfo.extraData.openid) {
          console.log('🔑 自动补充缓存的 openid 到用户信息:', cachedOpenId);
          userInfo.extraData.openid = cachedOpenId;
          // 🔥 同步保存到存储（静默更新）
          wx.setStorageSync(STORAGE_KEYS.USER_INFO, userInfo);
        }
      }
    }
    
    return userInfo || null;
  } catch (error) {
    console.error('💥 读取用户信息失败:', error);
    return null;
  }
}

/**
 * 检查是否已登录
 * @returns {boolean}
 */
function isLoggedIn() {
  try {
    const loggedIn = wx.getStorageSync(STORAGE_KEYS.IS_LOGGED_IN);
    return loggedIn === true;
  } catch (error) {
    console.error('💥 检查登录状态失败:', error);
    return false;
  }
}

/**
 * 获取融云token
 * @returns {string|null}
 */
function getUserToken() {
  try {
    const token = wx.getStorageSync(STORAGE_KEYS.USER_TOKEN);
    return token || null;
  } catch (error) {
    console.error('💥 获取token失败:', error);
    return null;
  }
}

/**
 * 获取用户手机号
 * @returns {string|null}
 */
function getUserPhone() {
  try {
    const phone = wx.getStorageSync(STORAGE_KEYS.USER_PHONE);
    return phone || null;
  } catch (error) {
    console.error('💥 获取手机号失败:', error);
    return null;
  }
}

/**
 * 清除用户信息（退出登录）
 */
function clearUserInfo() {
  try {
    console.log('🗑️ 清除用户信息');
    
    wx.removeStorageSync(STORAGE_KEYS.USER_INFO);
    wx.removeStorageSync(STORAGE_KEYS.IS_LOGGED_IN);
    wx.removeStorageSync(STORAGE_KEYS.USER_TOKEN);
    wx.removeStorageSync(STORAGE_KEYS.USER_PHONE);
    wx.removeStorageSync(STORAGE_KEYS.FRIEND_COUNT);  // 🔥 清除好友数量缓存
    
    // 🔥 清除融云Token
    wx.removeStorageSync('rongcloud_token');
    wx.removeStorageSync('rongcloud_connected');
    
    // 🔥 清除微信 OpenID（重要！避免用户混淆）
    wx.removeStorageSync('wx_openid');
    
    console.log('✅ 用户信息清除成功');
    return true;
  } catch (error) {
    console.error('💥 清除用户信息失败:', error);
    return false;
  }
}

/**
 * 更新用户信息（部分更新）
 * @param {Object} updates - 要更新的字段
 */
function updateUserInfo(updates) {
  try {
    const currentUserInfo = getUserInfo();
    if (!currentUserInfo) {
      console.error('❌ 当前没有用户信息');
      return false;
    }

    const updatedUserInfo = {
      ...currentUserInfo,
      ...updates
    };

    return saveUserInfo(updatedUserInfo);
  } catch (error) {
    console.error('💥 更新用户信息失败:', error);
    return false;
  }
}

/**
 * 🔥 保存好友数量缓存
 * @param {number} count - 好友数量
 */
function saveFriendCount(count) {
  try {
    console.log('💾 缓存好友数量:', count);
    wx.setStorageSync(STORAGE_KEYS.FRIEND_COUNT, count);
    return true;
  } catch (error) {
    console.error('💥 保存好友数量失败:', error);
    return false;
  }
}

/**
 * 🔥 获取好友数量缓存
 * @returns {number} 好友数量（默认返回0）
 */
function getFriendCount() {
  try {
    const count = wx.getStorageSync(STORAGE_KEYS.FRIEND_COUNT);
    console.log('📖 读取缓存的好友数量:', count || 0);
    return count || 0;
  } catch (error) {
    console.error('💥 读取好友数量失败:', error);
    return 0;
  }
}

/**
 * 通用存储方法 - 保存数据
 * @param {string} key - 存储键名
 * @param {any} value - 存储值
 */
function set(key, value) {
  try {
    wx.setStorageSync(key, value);
    return true;
  } catch (error) {
    console.error('💥 保存数据失败:', error);
    return false;
  }
}

/**
 * 通用存储方法 - 获取数据
 * @param {string} key - 存储键名
 * @returns {any}
 */
function get(key) {
  try {
    return wx.getStorageSync(key);
  } catch (error) {
    console.error('💥 获取数据失败:', error);
    return null;
  }
}

/**
 * 通用存储方法 - 删除数据
 * @param {string} key - 存储键名
 */
function remove(key) {
  try {
    wx.removeStorageSync(key);
    return true;
  } catch (error) {
    console.error('💥 删除数据失败:', error);
    return false;
  }
}

module.exports = {
  saveUserInfo,
  getUserInfo,
  isLoggedIn,
  getUserToken,
  getUserPhone,
  clearUserInfo,
  updateUserInfo,
  saveFriendCount,  // 🔥 保存好友数量缓存
  getFriendCount,   // 🔥 获取好友数量缓存
  set,
  get,
  remove,
  STORAGE_KEYS
};

